<?php
class finishOrder
{
	public function __construct()
	{

	}
	
	public function add($input)
	{
		$DBTable = new Zend_Db_Table('someTable');
		$tmps  = array_flip($DBTable->info('cols'));
		$data = array_intersect_key($input,$tmps);
		
		$data['created'] = Zend_Date::now('zh_TW')->toString('YYYY-MM-dd HH:mm:ss');
		$data['url'] = $url;
		$data['cnurl'] = $url;
		$data['enurl'] = $url;
		$data['prj_type'] = $input['prj_type'];
		$data['prj_order'] = 0; 
		
		$newId = $this->insert($data);
		
		$this->finishOrder($newId);
		
		return $newId;
	}
	
	public function del($id)
	{
		$DBTable->delete($primaryKey . ' =' . $id);
		$this->finishOrder();
	}
	
	/*
	 * 整理資料表內資料的順序。
	 * 分為三種情況：
	 * 1.刪除資料後，不傳入任何參數，馬上整理資料。
	 * 2.新增完資料後馬上整理，並把它排在最前面/最後面。
	 * 3.指定資料的順序，然後進行整理。
	 * @param $id int/str 資料ID
	 * @param $order int 該資料被指定的順序(預設為不指定) 
	 * @param $isPutFirst bool TRUE:將資料排在最前面；FALSE:將資料排在最後面。
	 */
    public function finishOrder($tableName, $primaryKey, $orderColName, $id=0, $order=NULL, $isPutFirst=TRUE)
    {
    	$DBTable = new Zend_Db_Table($tableName);
    	
    	////1.刪除資料後，不傳入任何參數，馬上整理資料。
    	if(0 === $id && NULL === $order)
    	{
    		$result = $DBTable->_db
    		->select()
    		->from($tableName)
    		->order($orderColName . ' ASC')
    		->query()
    		->fetchAll();
    		
    		$cnt = 1;
			foreach($result as $eachEl)
			{
				$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $eachEl[$primaryKey]);
				$cnt++;
			}
    	}
	   	////2.新增完資料後馬上整理，並把它排在最前面/最後面。
    	elseif(0 !== $id && NULL === $order)
    	{
    		$DBRow = $DBTable->fetchRow($primaryKey . ' ='. $id);
    		
    		////取得剩餘的商品ID，並依照檔次順序由小到大排列。
    		$result = $DBTable->_db
	    		->select()
	    		->from($tableName)
	    		->where($primaryKey . ' !=' . $id)
	    		->order($orderColName . ' ASC')
	    		->query()
	    		->fetchAll();
    		
    		////整理檔次順序。
    		$cnt = 1;
    		////將資料排在最前面。
    		if($isPutFirst)
    		{
    			$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $id);
				foreach($result as $eachEl)
				{
					$cnt++;
					$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $eachEl[$primaryKey]);
				}
    		}
    		////將資料排在最後面。
    		else 
    		{
    			foreach($result as $eachEl)
				{
					$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $eachEl[$primaryKey]);
					$cnt++;
				}
				$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $id);
    		}
    	}
    	////3.指定資料的順序，然後進行整理。
    	elseif(0 !== $id && NULL !== $order)
    	{
    		$DBRow = $this->fetchRow($primaryKey . ' ='. $id);
    		
    		////取得剩餘的商品ID，並依照檔次順序由小到大排列。
			$ary_els = $DBTable->_db
	    		->select()
	    		->from($tableName, array($primaryKey => $primaryKey))
	    		->where($primaryKey . ' !=' . $id)
	    		->order($orderColName . ' ASC')
	    		->query()
	    		->fetchAll();

    		//取得全部商品ID的數量。
    		$elAmt = count($ary_els) + 1;
  		
    		////整理檔次順序。
    		switch(TRUE)
    		{
    			case 1 < $order && $order < $elAmt:
    				$cnt = 1;
    				foreach($ary_els as $eachEl)
    				{
    					if($order == $cnt)
    					{
    						$this->update(array($orderColName => $order), $primaryKey . ' =' . $id);
    						$cnt++;
    						$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $eachEl[$primaryKey]);
    					}
    					else
    					{
    						$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $eachEl[$primaryKey]);
    					}
    					
    					$cnt++;
    				}
    				break;
    			
    			default:
    				switch(TRUE)
    				{
		    			case $order <= 1:
		    				array_unshift($ary_els, array($primaryKey => $id));
		    				break;
		    				
		    			case $order >= $elAmt:
		    				array_push($ary_els, array($primaryKey => $id));
		    				break;
    				}
		    		$cnt = 1;
					foreach($ary_els as $eachEl)
					{
						$this->update(array($orderColName => $cnt), $primaryKey . ' =' . $eachEl[$primaryKey]);
						$cnt++;
					}
					break;
    		}
    	}
    }
    
    
    
    
    
    
}